package org.ilead.iserve.dao.base;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;

import org.ilead.iserve.model.base.QueryResult;

/**
 * DAO层封装接口，包含常用的CURD和分页操佄1�7
 * 
 * @author <a href="http://www.blogjava.net/lishunli/" target="_blank">ShunLi</a>
 * @notes Created on 2010-1-24<br>
 *        Revision of last commit:$Revision: 635 $<br>
 *        Author of last commit:$Author: nhjsjmz@gmail.com $<br>
 *        Date of last commit:$Date: 2010-01-25 19:06:35 +0800 (周一, 25 丄1�7朄1�7 2010) $<br>
 *        <p>
 */
public interface IBaseDao<T>
{

	/**
	 * 根据属�1�7�查找对豄1�7
	 * 
	 * @param propertyName
	 *            属�1�7�（对应Bean＄1�7
	 * @param value
	 *            属�1�7�1�7
	 * @return 根据属�1�7�查找对豄1�7
	 */
	public List<T> findByProperty(String propertyName, Object value);

	/**
	 * 根据实体查找对象
	 * 
	 * @param entiey
	 *            实体（T类型＄1�7
	 * @return 根据属�1�7�查找对豄1�7
	 */
	public List<T> findByEntity(Object entiey);

	/**
	 * 获取记录总数
	 * 
	 * @param entityClass
	 *            实体籄1�7
	 * @return
	 */
	public int getCount();

	/**
	 * 保存实体
	 * 
	 * @param entity
	 *            实体id
	 */
	public void save(Object entity);

	/**
	 * 更新实体
	 * 
	 * @param entity
	 *            实体id
	 */
	public void update(Object entity);

	/**
	 * 删除实体
	 * 
	 * @param entityClass
	 *            实体籄1�7
	 * @param entityids
	 *            实体id数组
	 */
	public void delete(Serializable... entityids);

	/**
	 * 获取实体
	 * 
	 * @param <T>
	 * @param entityClass
	 *            实体籄1�7
	 * @param entityId
	 *            实体id
	 * @return
	 */
	public T find(Serializable entityId);

	/**
	 * 获取分页数据
	 * @param firstindex 弄1�7始索弄1�7
	 * @param maxresult 每页显示记录敄1�7
	 * @param wherejpql where语句
	 * @param queryParams 查询参数
	 * @param orderby 排序序列
	 * @return 分页数据
	 */
	public QueryResult<T> getScrollData(final int firstindex, final int maxresult, final String wherejpql, final Object[] queryParams,
			final LinkedHashMap<String, String> orderby);

	/**
	 * 获取分页数据
	 * @param firstindex 弄1�7始索弄1�7
	 * @param maxresult 每页显示记录敄1�7
	 * @param wherejpql where语句
	 * @param queryParams 查询参数
	 * @return 分页数据
	 */
	public QueryResult<T> getScrollData(final int firstindex, final int maxresult, final String wherejpql, final Object[] queryParams);
	
	
	/**
	 * 获取分页数据
	 * @param firstindex 弄1�7始索弄1�7
	 * @param maxresult 每页显示记录敄1�7
	 * @param wherejpql where语句
	 * @param queryParams 查询参数
	 * @return 分页数据
	 */
	public QueryResult<T> getScrollData(final int firstindex, final int maxresult, final String wherejpql, final LinkedHashMap<String, String> orderby);

	/**
	 * 获取分页数据
	 * @param firstindex 弄1�7始索弄1�7
	 * @param maxresult 每页显示记录敄1�7
	 * @param orderby 排序序列
	 * @return 分页数据
	 */
	public QueryResult<T> getScrollData(final int firstindex, final int maxresult, final LinkedHashMap<String, String> orderby);

	/**
	 * 获取分页数据
	 * @param firstindex 弄1�7始索弄1�7
	 * @param maxresult 每页显示记录敄1�7
	 * @return 分页数据
	 */
	public QueryResult<T> getScrollData(final int firstindex, final int maxresult);

	/**
	 * 获取扄1�7有对豄1�7
	 * 
	 * @return 扄1�7有对豄1�7
	 */
	public QueryResult<T> getScrollData();
}
